home *** CD-ROM | disk | FTP | other *** search
/ Aminet 48 / Aminet 48 (2002)(GTI - Schatztruhe)[!][Apr 2002].iso / Aminet / text / dtp / MUIPDFPrinter.lha / MUIPDFPrinter / MUIPDFPrinter.rexx < prev   
Encoding:
OS/2 REXX Batch file  |  2002-01-02  |  38.6 KB  |  1,523 lines

  1. /*
  2. ** -----------------------------------------------
  3. **  $VER: MUIPDFPrinter V1.00 (29 December 2001)
  4. **  ©1999-2001 Michael Merkel
  5. ** -----------------------------------------------
  6. */
  7.  
  8. SIGNAL ON SYNTAX
  9. SIGNAL ON HALT
  10. /* SIGNAL ON ERROR */
  11. SIGNAL ON BREAK_C
  12. OPTIONS RESULTS
  13.  
  14.  
  15. /*
  16. TRACE ALL
  17. global.DEBUG = 1
  18. */
  19.  
  20.  
  21. /*
  22. ** first of all add the needed libraries
  23. */
  24.  
  25. Call AddLib 'rmh.library',0,-30
  26.  
  27. IF ~show("L","rmh.library")
  28. THEN IF ~AddLib("rmh.library", 0, -30) THEN EXIT
  29.  
  30. IF RMH_AddLibrary('rxmui.library')~=0
  31. THEN DO
  32.     Call RMH_EasyRequest "Couldn't open" result,"PGS",'Quit'
  33.     Signal Quit
  34. END
  35.  
  36. IF RMH_AddLibrary('rxasl.library')~=0
  37. THEN DO
  38.     Call RMH_EasyRequest "Couldn't open" result,"PGS",'Quit'
  39.     Signal Quit
  40. END
  41.  
  42. Call RMH_MacroEnv 'Macro','ProgDir'
  43.  
  44. /*
  45. ** DEBUG MODE!!!
  46. */
  47.  
  48. Call rxMuiOpt("DEBUGMODE SHOWERR")
  49.  
  50. /*
  51. ** Make sure rexx support is opened
  52. */
  53. IF ~SHOW('L','rexxsupport.library')
  54. THEN CALL ADDLIB('rexxsupport.library',0,-30)
  55. IF ~SHOW('L','softlogik:libs/slarexxsupport.library')
  56. THEN CALL ADDLIB('softlogik:libs/slarexxsupport.library',0,-30)
  57.  
  58. /*
  59. ** set globals and defaults (including settings)
  60. */
  61. Call SetDefaults
  62.  
  63. IF ~SHOW('P','PAGESTREAM')
  64. THEN DO
  65.    CALL ShowRequester("Start PageStream first!", "Of course...")
  66.    Exit
  67. END
  68. ADDRESS 'PAGESTREAM'
  69.  
  70. /*
  71. ** do some checks before
  72. */
  73. Call CheckRoutines
  74.  
  75. /*
  76. ** load prefs
  77. */
  78. Call LoadPrefs(standardPrefs)
  79. Call BuildGUI
  80. muiBusyWinOpen = global.FALSE
  81.  
  82. /*
  83. ** open the window
  84. */
  85. 'LOCKINTERFACE TRUE'
  86. Call Set("muiWin", "OPEN", 1)
  87. Call GetAttr("muiWin", "OPEN", "o")
  88. IF (o = 0)
  89. THEN DO
  90.     Say "can't open window"
  91.     EXIT
  92. END
  93.  
  94. Call Set("muiWin", "SLEEP", 1)
  95. Call PrefsWindowSet()
  96. Call Set("muiWin", "SLEEP", 0)
  97. Call EventLoop()
  98. Call PrefsWindowGet()
  99. Call Set("muiWin", "OPEN", 0)
  100.  
  101. Call PDFConverter()
  102. Call CleanUp()
  103.  
  104. EXIT
  105.  
  106. /* /// BuildGUI()
  107. */
  108. BuildGUI:
  109.  
  110.     /*
  111.     ** Create the rxMUI GUI
  112.     ** --------------------
  113.     */
  114.  
  115.     /*
  116.     ** first of all the let's define the application object
  117.     */
  118.  
  119.     muiApp.Title       = pgsName
  120.     muiApp.Version     = "$VER: "|| pgsVersion ||' ('|| pgsDate ||')'
  121.     muiApp.Copyright   = pgsCopy
  122.     muiApp.Author      = pgsAuthor
  123.     muiApp.Description = "Create picture catalogs within PageStream"
  124.     muiApp.Base        = pgsName
  125.     muiApp.diskobject  = pgsName
  126.     muiApp.ctrlc       = 1
  127.     muiApp.menustrip   = "muiMenuStrip"
  128.     muiApp.subwindow   = "muiWin"
  129.  
  130.     /*
  131.     ** let's define the window
  132.     */
  133.     muiWin.ID       = "MAIN"
  134.     muiWin.Title    = pgsName pgsVersion ||' ('|| pgsDate ||') - '|| pgsCopy
  135.     muiWin.Contents = "muiMainGroup"
  136.  
  137.  
  138.     /*
  139.     ** define the menu
  140.     */
  141.     muiMenuStrip.0 = "muiMenuProject"
  142.         muiMenuProject.Title = "Project"
  143.         muiMenuProject.Class = "MENU"
  144.         muiMenuProject.0 = MenuItem("muiMenuAbout",     "About...",      "?")
  145.         muiMenuProject.1 = MenuItem("muiMenuAboutrxMUI","About RxMUI..."    )
  146.         muiMenuProject.2 = MenuItem("muiMenuAboutMUI",  "About MUI..."      )
  147.         muiMenuProject.3 = MenuItem("",                 "BAR"               )
  148.         muiMenuProject.4 = MenuItem("muiMenuQuit",      "Quit",          "Q")
  149.     muiMenuStrip.1 = "muiMenuPrefs"
  150.         muiMenuPrefs.Title = "Prefs"
  151.         muiMenuPrefs.Class = "MENU"
  152.         muiMenuPrefs.0 = MenuItem("muiMenuPrefsMUI",  "MUI...",          "M")
  153.         muiMenuPrefs.1 = MenuItem("",                  "BAR")
  154.         muiMenuPrefs.2 = MenuItem("muiMenuLoad",      "Load",          "L")
  155.         muiMenuPrefs.3 = MenuItem("muiMenuSave",      "Save",          "S")
  156.         muiMenuPrefs.4 = MenuItem("muiMenuSaveAs",      "Save As...",      "A")
  157.     res = NewObj("MENUSTRIP", "muiMenuStrip")
  158.     IF (res ~= 0)
  159.     THEN Call Err(res)
  160.  
  161.     /*
  162.     ** let's define the window contents
  163.     */
  164.  
  165.     tab = 0
  166.  
  167.     muiMainGroup.0            = "muiGroup0"
  168.         muiGroup0.Class            = "GROUP"
  169.         muiGroup0.Frame            = "GROUP"
  170.         muiGroup0.Horiz            = 0
  171.         muiGroup0.0                = "muiGroup00"
  172.             muiGroup00.Class        = "GROUP"
  173.             muiGroup00.Horiz        = 1
  174.             muiGroup00.Frame        = "GROUP"
  175.             muiGroup00.Background    = "FILLBACK"
  176.             muiGroup00.0            = HSpace()
  177.             muiGroup00.1                = "muiBITMAP"
  178.                 muiBITMAP.Class            = "PICTURE"
  179.                 muiBITMAP.Precision        = "ICON"
  180.                 muiBITMAP.SourceType    = "FILE"
  181.                 muiBITMAP.Source        = pgsPic
  182.                 muiBITMAP.InputMode        = "RelVerify"
  183.                 muiBITMAP.Frame            = "BUTTON"
  184.             muiGroup00.2            = Label(ParseText('%c%b%8'|| pgsName pgsVersion ||'%n\n'|| pgsCopy))
  185.             muiGroup00.3            = HSpace()
  186.         muiGroup0.1                = "muiGroupPage00"
  187.             muiGroupPage00.Class    = "GROUP"
  188.             muiGroupPage00.Horiz    = 1
  189.             muiGroupPage00.0        = "muiPagerList"
  190.                 muiPagerList.Class        = "NLISTVIEW"
  191.                 muiPagerList.List        = "pagerList"
  192.                 muiPagerList.Weight        = 20
  193.                     pagerList.Class            = "NLIST"
  194.                     pagerList.List            = "pagerList"
  195.                     pagerList.0                = "PDF printer"
  196.             muiGroupPage00.1        = MakeObj(,"Balance",)
  197.             muiGroupPage00.2        = "muiPager"
  198.                 muiPager.Class            = "GROUP"
  199.                 muiPager.Weight            = 50
  200.                 muiPager.PageMode        = 1
  201.                 /*---------------------------------------------*/
  202.                 muiPager.tab            = "muiTabPDF"; tab = tab + 1
  203.                     muiTabPDF.Class            = "GROUP"
  204.  
  205.                     muiTabPDF.0                = "muiTabPDF0"
  206.                         muiTabPDF0.Class        = "GROUP"
  207.                         muiTabPDF0.0            = "muiTab0T"
  208.                             muiTab0T.Class            = "TEXT"
  209.                             muiTab0T.Contents        = ParseText('%c%8Page spreading%n')
  210.                         muiTabPDF0.1            = "muiTab00"
  211.                             muiTab00.Class            = "GROUP"
  212.                             muiTab00.Columns        = 2
  213.                             muiTab00.0                = Label(ParseText('Horizontal: '))
  214.                             muiTab00.1                = "G_X_NUM"
  215.                                 g_x_num.Class            = "SLIDER"
  216.                                 g_x_num.Min                = 1
  217.                                 g_x_num.Max                = 40
  218.                                 g_x_num.Level            = 1
  219.                             muiTab00.2                = Label(ParseText('Vertical: '))
  220.                             muiTab00.3                = "G_Y_NUM"
  221.                                 g_y_num.Class            = "SLIDER"
  222.                                 g_y_num.Min                = 1
  223.                                 g_y_num.Max                = 40
  224.                                 g_y_num.Level            = 1
  225.  
  226.                     muiTabPDF.1                = VSpace(10)
  227.  
  228.                     muiTabPDF.2                = "muiTabPDF1"
  229.                         muiTabPDF1.Class        = "GROUP"
  230.                         muiTabPDF1.0            = "muiTab1T"
  231.                             muiTab1T.Class            = "TEXT"
  232.                             muiTab1T.Contents        = ParseText('%c%8PDF Start and End pages%n')
  233.                         muiTabPDF1.1            = "muiTab10"
  234.                             muiTab10.Class            = "GROUP"
  235.                             muiTab10.Columns        = 2
  236.                             muiTab10.0                = Label(ParseText('First Page #'))
  237.                             muiTab10.1                = "G_FIRSTPAGE"
  238.                                 g_firstPage.Class        = "SLIDER"
  239.                                 g_firstPage.Min            = 1
  240.                                 g_firstPage.Max            = 500
  241.                                 g_firstPage.Level        = 1
  242.                             muiTab10.2                = Label(ParseText('Last Page #'))
  243.                             muiTab10.3                = "G_LASTPAGE"
  244.                                 g_lastPage.Class        = "SLIDER"
  245.                                 g_lastPage.Min            = 1
  246.                                 g_lastPage.Max            = 500
  247.                                 g_lastPage.Level        = 1
  248.  
  249.                     muiTabPDF.3                = VSpace(10)
  250.  
  251.                     muiTabPDF.4                = "muiTabPDF2"
  252.                         muiTabPDF2.Class        = "GROUP"
  253.                         muiTabPDF2.0            = "muiTab2T"
  254.                             muiTab2T.Class            = "TEXT"
  255.                             muiTab2T.Contents        = ParseText('%c%8Converter File settings%n')
  256.                         muiTabPDF2.1            = "muiTab20"
  257.                             muiTab20.Class            = "GROUP"
  258.                             muiTab20.Columns        = 2
  259.                             muiTab20.0                = HSpace(1)
  260.                             muiTab20.1                = VSpace()
  261.                             muiTab20.2                = Label("GhostScript executeable")
  262.                             muiTab20.3                = "G_FNGS"
  263.                                 g_fnGS.Class            = "POPASL"
  264.                                 g_fnGS.Type                = "FILE"
  265.                                 g_fnGS.Title            = "specify GhostScript executeable..."
  266.                                 g_fnGS.PositiveText        = "ok"
  267.                                 g_fnGS.NegativeText        = "cancel"
  268.                                 g_fnGS.RejectIcons        = 1
  269.                                 g_fnGS.String            = String("g_gsFileName")
  270.                             muiTab20.4                = Label("EPS Files")
  271.                             muiTab20.5                = "G_FNEPS"
  272.                                 g_fnEPS.Class            = "POPASL"
  273.                                 g_fnEPS.Type            = "FILE"
  274.                                 g_fnEPS.Title            = "specify EPS filename and path..."
  275.                                 g_fnEPS.PositiveText    = "ok"
  276.                                 g_fnEPS.NegativeText    = "cancel"
  277.                                 g_fnEPS.RejectIcons        = 1
  278.                                 g_fnEPS.String            = String("g_epsFileName")
  279.  
  280.                             muiTabThumb0.2                = "muiTabThumb01"
  281.                                 muiTabThumb01.Class            = "GROUP"
  282.                                 muiTabThumb01.Horiz            = 1
  283.                                 muiTabThumb01.0                = Checkmark(g_upscale)
  284.                                 muiTabThumb01.1                = Label(ParseText('do not upscale'))
  285.                                 muiTabThumb01.2                = HSpace()
  286.  
  287.                             muiTab20.6                = HSpace()
  288.                             muiTab20.7                = "muiTab200"
  289.                                 muiTab200.Class            = "GROUP"
  290.                                 muiTab200.Horiz            = 1
  291.                                 muiTab200.0                = Checkmark(g_leaveExternal)
  292.                                 muiTab200.1                = Label(ParseText("leave EPS external"))
  293.                                 muiTab200.2                = HSpace()
  294.  
  295.                     muiTabPDF.5                = VSpace(10)
  296.  
  297.                     muiTabPDF.6                = "muiTabPDF3"
  298.                         muiTabPDF3.Class        = "GROUP"
  299.                         muiTabPDF3.0            = "muiTab3T"
  300.                             muiTab3T.Class            = "TEXT"
  301.                             muiTab3T.Contents        = ParseText('%c%8PDF Filename%n')
  302.                         muiTabPDF3.1            = "muiTab30"
  303.                             muiTab30.Class            = "GROUP"
  304.                             muiTab30.Columns        = 2
  305.                             muiTab30.0                = HSpace(1)
  306.                             muiTab30.1                = VSpace()
  307.                             muiTab30.2                = Label("PDF file to parse")
  308.                             muiTab30.3                = "G_FNPDF"
  309.                                 g_fnPDF.Class            = "POPASL"
  310.                                 g_fnPDF.Type            = "FILE"
  311.                                 g_fnPDF.Title            = "specify PDF file to parse..."
  312.                                 g_fnPDF.PositiveText    = "ok"
  313.                                 g_fnPDF.NegativeText    = "cancel"
  314.                                 g_fnPDF.RejectIcons        = 1
  315.                                 g_fnPDF.DoPatterns        = 1
  316.                                 g_fnPDF.DoMultiSelect    = 1
  317.                                 g_fnPDF.Pattern            = "#?.(PDF|PS|EPS)"
  318.                                 g_fnPDF.String            = String("g_pdfFileName")
  319.  
  320.     muiMainGroup.1            = "muiButtonGroup"
  321.         muiButtonGroup.Class    = "GROUP"
  322.         muiButtonGroup.Columns    = 2
  323.         muiButtonGroup.0        = Button("G_OK",     "_Generate PDF pages")
  324.         muiButtonGroup.1        = Button("G_CANCEL", "_Cancel")
  325.  
  326.     /*
  327.     ** create all
  328.     */
  329.     Call NewObj("APPLICATION","muiApp")
  330.  
  331.     /*
  332.     ** window close gadget means quit...
  333.     */
  334.     Call Notify("muiWin", "CLOSEREQUEST", 1, "muiApp", "RETURNID", "QUIT")
  335.  
  336.     /*
  337.     ** Ok and Cancel Buttons...
  338.     */
  339.     Call Notify("G_OK",     "PRESSED", 0, "muiApp", "RETURNID")
  340.     Call Notify("G_CANCEL", "PRESSED", 0, "muiApp", "RETURNID")
  341.  
  342.     /*
  343.     ** Menu events...
  344.     */
  345.     Call Notify("muiMenuLoad",        "MENUTRIGGER", "EVERYTIME", "muiApp", "RETURNID")
  346.     Call Notify("muiMenuSave",        "MENUTRIGGER", "EVERYTIME", "muiApp", "RETURNID")
  347.     Call Notify("muiMenuSaveAs",    "MENUTRIGGER", "EVERYTIME", "muiApp", "RETURNID")
  348.     Call Notify("muiMenuPrefsMUI",    "MENUTRIGGER", "EVERYTIME", "muiApp", "OpenConfigWindow")
  349.  
  350.     Call Notify("muiMenuAbout",            "MENUTRIGGER", "EVERYTIME", "muiApp", "ABOUT",      "muiWin")
  351.     Call Notify("muiMenuAboutrxMUI",    "MENUTRIGGER", "EVERYTIME", "muiApp", "ABOUTRXMUI", "muiWin")
  352.     Call Notify("muiMenuAboutMUI",        "MENUTRIGGER", "EVERYTIME", "muiApp", "ABOUTMUI",   "muiWin")
  353.     Call Notify("muiMenuQuit",            "MENUTRIGGER", "EVERYTIME", "muiApp", "RETURNID")
  354.  
  355.     /*
  356.     ** Button click -> about
  357.     */
  358.     Call Notify("muiBitmap", "PRESSED", 0, "muiApp", "ABOUT", "muiWin")
  359.  
  360.     Call Notify("muiPagerList", "ACTIVE", "EVERYTIME", "muiPager", "SET", "ACTIVEPAGE", "TRIGGERVALUE")
  361.  
  362.     /*
  363.     ** Set active gadget at start
  364.     */
  365.     Call Set("muiWin", "ActiveObject", "G_OK")
  366.     Call set("muiPagerList", "ACTIVE", 0)
  367.  
  368.     /*
  369.     ** Set all the Cycle chains (here, because it will not work above!)
  370.     */
  371.     Call Set("muiPagerList",    "CYCLECHAIN", 1)
  372.  
  373.     Call Set("g_x_num",            "CYCLECHAIN", 1)
  374.     Call Set("g_y_num",            "CYCLECHAIN", 1)
  375.     Call Set("g_firstPage",        "CYCLECHAIN", 1)
  376.     Call Set("g_lastPage",        "CYCLECHAIN", 1)
  377.     Call Set("g_fnGS",            "CYCLECHAIN", 1)
  378.     Call Set("g_fnEPS",            "CYCLECHAIN", 1)
  379.     Call Set("g_leaveExternal",    "CYCLECHAIN", 1)
  380.     Call Set("g_fnPDF",            "CYCLECHAIN", 1)
  381.     Call Set("g_ok",            "CYCLECHAIN", 1)
  382.     Call Set("g_cancel",        "CYCLECHAIN", 1)
  383.  
  384.     /*
  385.     ** Set all the short help texts
  386.     */
  387.     Call Set("g_x_num",            "SHORTHELP", ParseText("Number of thumbnails per row."))
  388.     Call Set("g_y_num",            "SHORTHELP", ParseText("Number of thumbnails per column."))
  389.     Call Set("g_firstPage",        "SHORTHELP", ParseText("First page in PDF File to place."))
  390.     Call Set("g_lastPage",        "SHORTHELP", ParseText("Last page in PDF File to place."))
  391.     Call Set("g_fnGS",            "SHORTHELP", ParseText("Location of Ghostscript executable."))
  392.     Call Set("g_fnEPS",            "SHORTHELP", ParseText("Path and name of temporary EPS files."))
  393.     Call Set("g_leaveExternal",    "SHORTHELP", ParseText("Leave temp EPS files external"))
  394.     Call Set("g_fnPDF",            "SHORTHELP", ParseText("THE PDF file."))
  395.     Call Set("g_ok",            "SHORTHELP", ParseText("Start the Catalog generation"))
  396.     Call Set("g_cancel",        "SHORTHELP", ParseText("Leave program"))
  397.  
  398. Return
  399. /* /// */
  400. /* /// BusyClose()
  401. */
  402. BusyClose:
  403.     IF (muiBusyWinOpen = global.TRUE)
  404.     THEN DO
  405.         Call GetAttr("muiBusyWin", "OPEN", "o")
  406.         IF (o ~= 0)
  407.         THEN Call Set("muiBusyWin", "OPEN", 0)
  408.         Call Dispose("muiBusyWin")
  409.         muiBusyWinOpen = FALSE
  410.     END
  411. Return
  412. /* /// */
  413. /* /// BusyHandle(bNum, current)
  414. */
  415. BusyHandle: PROCEDURE
  416.     /*
  417.     ** Handle the mui busy window for font loading...
  418.     */
  419.     PARSE ARG bNum,current
  420.  
  421.     bName = "muiBusyGauge" || bNum
  422. /*
  423.     GetAttr(bName, "MAX", max)
  424. */
  425.     Call BusyProgress(bNum, current)
  426.  
  427.     /*
  428.     ** this is the standard cycle to handle an application
  429.     */
  430.     ctrl_C = 2**12
  431.     s = 0
  432.     Call Handle("muiApp", "H", s)
  433.     DO i = 0 TO (H.num - 1)
  434.         id = H.i
  435.         SELECT
  436.             WHEN (id = "BUSY_CANCEL")
  437.             THEN DO
  438.                 userCancel = 1
  439.             END
  440.         END
  441.     END
  442.     s = Wait( OR(h.signals, ctrl_C) )
  443.     IF (AND(s, ctrl_C) ~= 0)
  444.     THEN userCancel = 1
  445.  
  446. Return userCancel
  447. /* /// */
  448. /* /// BusyOpen(title, bAnz, text1, text2, text3, total1, total2, total3)
  449. */
  450. BusyOpen:
  451.     /*
  452.     ** Open a MUI busy requester with a maximum of 3 sliders (should be enough)
  453.     */
  454.     userCancel = 0
  455.     PARSE ARG title,bAnz,text1,text2,text3,total1,total2,total3
  456.  
  457.     /*
  458.     ** let's define the window
  459.     */
  460.  
  461.     muiBusyWin.ID          = "BUSY"
  462.     muiBusyWin.Title       = ParseText(title)
  463.     muiBusyWin.Contents    = "muiBusyGroup"
  464.     muiBusyWin.NoMenus     = 1
  465.  
  466.     /*
  467.     ** let's define the window contents
  468.     ** (simply 3 versions... how lazy!)
  469.     */
  470.  
  471.     muiBusyGroup.0 = "muiBusyGroup0"
  472.         muiBusyGroup0.Class            = "GROUP"
  473.         muiBusyGroup0.Frame            = "GROUP"
  474.         muiBusyGroup0.Horiz            = 0
  475.         muiBusyGroup0.0                = "muiBusyText1"
  476.             muiBusyText1.Class            = "TEXT"
  477.             muiBusyText1.Contents        = ParseText(text1)
  478.         muiBusyGroup0.1                = "muiBusyGauge1"
  479.             muiBusyGauge1.Class            = "GAUGE"
  480.             muiBusyGauge1.Frame            = "GAUGE"
  481.             muiBusyGauge1.Horiz            = 1
  482.             muiBusyGauge1.InfoText        = ""
  483.             muiBusyGauge1.Max            = total1
  484.             muiBusyGauge1.Current        = 0
  485.             muiBusyGauge1.FixHeightTxt    = 1
  486.     IF (bAnz >= 2)
  487.     THEN DO
  488.         muiBusyGroup0.2                = "muiBusyText2"
  489.             muiBusyText2.Class            = "TEXT"
  490.             muiBusyText2.Contents        = ParseText(text2)
  491.         muiBusyGroup0.3                = "muiBusyGauge2"
  492.             muiBusyGauge2.Class            = "GAUGE"
  493.             muiBusyGauge2.Frame            = "GAUGE"
  494.             muiBusyGauge2.Horiz            = 1
  495.             muiBusyGauge2.InfoText        = ""
  496.             muiBusyGauge2.Max            = total2
  497.             muiBusyGauge2.Current        = 0
  498.             muiBusyGauge2.FixHeightTxt    = 1
  499.     END
  500.     IF (bAnz = 3)
  501.     THEN DO
  502.         muiBusyGroup0.4                = "muiBusyText3"
  503.             muiBusyText3.Class            = "TEXT"
  504.             muiBusyText3.Contents        = ParseText(text3)
  505.         muiBusyGroup0.5                = "muiBusyGauge3"
  506.             muiBusyGauge3.Class            = "GAUGE"
  507.             muiBusyGauge3.Frame            = "GAUGE"
  508.             muiBusyGauge3.Horiz            = 1
  509.             muiBusyGauge3.InfoText        = ""
  510.             muiBusyGauge3.Max            = total3
  511.             muiBusyGauge3.Current        = 0
  512.             muiBusyGauge3.FixHeightTxt    = 1
  513.     END
  514.  
  515.     IF (bAnz = 1)
  516.     THEN DO
  517.         muiBusyGroup0.2 = HBar()
  518.         muiBusyGroup0.3 = Button("BUSY_CANCEL", "_Cancel")
  519.     END
  520.     ELSE IF (bAnz = 2)
  521.     THEN DO
  522.         muiBusyGroup0.4 = HBar()
  523.         muiBusyGroup0.5 = Button("BUSY_CANCEL", "_Cancel")
  524.     END
  525.     ELSE IF (bAnz = 3)
  526.     THEN DO
  527.         muiBusyGroup0.6 = HBar()
  528.         muiBusyGroup0.7 = Button("BUSY_CANCEL", "_Cancel")
  529.     END
  530.  
  531.     /*
  532.     ** Busy Cancel Button...
  533.     */
  534.     Call Notify("BUSY_CANCEL", "PRESSED", 0, "muiApp", "SETVAR", "userCancel")
  535.  
  536.     /*
  537.     ** generate new window object
  538.     */
  539.     res   = NewObj("WINDOW","muiBusyWin",,1)
  540.     IF (res ~= 0)
  541.     THEN Call err(res)
  542.     muiBusyWinOpen = global.TRUE
  543.  
  544.     /*
  545.     ** Set active gadget at start
  546.     */
  547.     Call Set("muiBusyWin", "ActiveObject", "BUSY_CANCEL")
  548.  
  549.     /*
  550.     ** to let the window be a bit larger....
  551.     */
  552.     Call Set("muiBusyGauge1", "INFOTEXT", ".............................................................................")
  553.  
  554.     /*
  555.     ** Add window to application
  556.     */
  557.     Call Add("muiApp", "muiBusyWin")
  558.  
  559.     Call Set("muiBusyWin", "OPEN", 1)
  560.     Call GetAttr("muiBusyWin", "OPEN", "o")
  561.     IF (o = 0)
  562.     THEN DO
  563.         Say "can't open busy window!"
  564.         Call ShowRequester("Can't open busy window! -> Exiting", "Sorry...")
  565.         Call CleanUp
  566.     END
  567. Return 1
  568. /* /// */
  569. /* /// BusyProgress(bNum, current)
  570. */
  571. BusyProgress: PROCEDURE
  572.     /*
  573.     ** Set a new progress
  574.     */
  575.     PARSE ARG bNum,current
  576.  
  577.     bName = "muiBusyGauge" || bNum
  578.     Call GetAttr(bName, "MAX", max)
  579.     Call Set(bName, "CURRENT", Trunc(current))
  580.     Call Set(bName, "INFOTEXT", Trunc(100*current/max) ||"%")
  581. Return userCancel
  582. /* /// */
  583. /* /// BusyText(bNum, text)
  584. */
  585. BusyText:
  586.     /*
  587.     ** Set a new text for one gauge in the busy requester
  588.     */
  589.     PARSE ARG bNum,text
  590.  
  591.     bName = "muiBusyText" || bNum
  592.     Call Set(bName, "CONTENTS", ParseText(text))
  593. Return
  594. /* /// */
  595. /* /// CheckPrefsVersion(fileName)
  596. */
  597. CheckPrefsVersion:
  598.     /*
  599.     ** Check if prefsfile is compatible
  600.     ** --------------------------------
  601.     */
  602.  
  603.     PARSE ARG fileName
  604.  
  605.     IF (fileName = "")
  606.     THEN fileName = standardPrefs
  607.  
  608.     ok = Open('Prefs', fileName, 'R')
  609.     IF (ok = 1)
  610.     THEN DO
  611.         dummy = ReadLn('Prefs')
  612.         cl = Close('Prefs')
  613.  
  614.         IF ( Left(dummy, Length(pgsName)) = pgsName) & (Right(dummy,4) >= pgsLVer)
  615.         THEN Return 0
  616.     END
  617. RETURN 1
  618. /* /// */
  619. /* /// CheckRoutines()
  620. */
  621. CheckRoutines:
  622.     ADDRESS "PAGESTREAM"
  623.  
  624.     'CURRENTWINDOWPATH'
  625.      oldWinName = RESULT
  626.     IF (RC = 10)
  627.     THEN DO
  628.         Call ShowRequester('Please open a new Document first.')
  629.         ADDRESS PAGESTREAM 'LOCKINTERFACE FALSE'
  630.         Call CleanUp()
  631.         EXIT
  632.     END
  633.  
  634.     'GETWINDOWPOS SIZE wp WINDOW "'oldWinName'"'
  635.     wPw = wp.w
  636.     wPh = wp.h
  637.     
  638.     'GETPAGEMASTERPAGE MASTERPAGE mname WINDOW "'oldwinname'"'
  639.     IF (RC = 10)
  640.     THEN DO
  641.         Call ShowRequester('Please open a new Document first.')
  642.         ADDRESS PAGESTREAM 'LOCKINTERFACE FALSE'
  643.         Call CleanUp()
  644.         EXIT
  645.     END
  646.  
  647.     'CURRENTPAGE WINDOW "'oldwinname'"'
  648.      pageNumber = RESULT
  649.  
  650.     IF ((pageNumber < 1) | (pageNumber > 999999))
  651.     THEN DO
  652.         /* maybe the user started from the masterpage?? */
  653.         Call ShowRequester('Please go to a valid page and start again!')
  654.         ADDRESS PAGESTREAM 'LOCKINTERFACE FALSE'
  655.         Call CleanUp()
  656.         EXIT
  657.     END
  658.  
  659. Return
  660. /* /// */
  661. /* /// CleanUp()
  662. */
  663. CleanUp:
  664.  
  665.     /*
  666.     ** Close busy requester, clean up and leave program
  667.     ** ------------------------------------------------
  668.     */
  669.  
  670.     IF (muiBusyWinOpen = global.TRUE)
  671.     THEN DO
  672.         Call BusyClose()
  673.     END
  674.  
  675.     /*
  676.     ** Unlock PageStream
  677.     */
  678.     Call UnlockPageStream()
  679.  
  680.     IF (global.DumpFile ~= '')
  681.     THEN DO
  682.         Close("global.DumpFile")
  683.     END
  684.  
  685. EXIT
  686. /* /// */
  687. /* /// ConvertToShortMeasurement(inp)
  688. */
  689. /*************************************************/
  690. /* convert long measurement to short measurement */
  691. /* (CENTIMETERS -> cm ...)                       */
  692. /*************************************************/
  693. ConvertToShortMeasurement:
  694.     PARSE ARG inp
  695.  
  696.     long = 'INCHES CENTIMETERS MILLIMETERS PICAS POINTS PRINTERPICAS PRINTERPOINTS CICEROS DIDOTPOINTS FEET METERS'
  697.     short = 'i cm mm p pt pp ppt c d f m'
  698.  
  699.     outp = ''
  700.     DO k = 1 to Words(long)
  701.         IF ( Word(long, k) = inp )
  702.         THEN outp = Word(short, k)
  703.     END
  704.     IF (outp = '')
  705.     THEN DO
  706.         DO k = 1 to Words(long)
  707.             IF (Word(long, k) = inp)
  708.             THEN outp = Word(short, k)
  709.         END
  710.     END
  711. Return outp
  712. /* /// */
  713. /* /// dumpVar(VarName)
  714. */
  715. dumpVar:
  716.     PARSE ARG vn
  717.  
  718.     IF global.DEBUG > 0
  719.     THEN DO
  720.         INTERPRET 't = "'|| vn || ' = "'|| vn
  721.         Call dumpText(t)
  722.     END
  723. Return 0
  724. /* /// */
  725. /* /// dumpText(text)
  726. */
  727. dumpText:
  728.     PARSE ARG text
  729.  
  730.     IF global.DEBUG > 0
  731.     THEN DO
  732.         Say text
  733.         IF global.debug = 2
  734.         THEN DO
  735.             IF (global.DumpFile = '')
  736.             THEN DO
  737.                 global.DumpFile = 'DumpFile'
  738.                 Call Open("global.DumpFile", "CON:0/0/1000/100/","W")
  739.             END
  740.             IF global.DumpFile ~= ''
  741.             THEN DO
  742.                 Call WriteLN("global.DumpFile", text)
  743.             END
  744.         END
  745.     END
  746. Return 0
  747. /* /// */
  748. /* /// err(res)
  749. */
  750. err:
  751.     PARSE ARG res
  752.  
  753.     ADDRESS 'PAGESTREAM'
  754.     'LOCKINTERFACE FALSE'
  755.     'REFRESH ON'
  756.     'REFRESHWINDOW WINDOW "'|| oldWinName ||'"'
  757.     ''defmeasure''
  758.     Call pgsRequester(GetRXmuiString(res) "in line" sigl-1)
  759. Exit
  760. /* /// */
  761. /* /// EventLoop()
  762. */
  763. EventLoop:
  764.     /*
  765.     ** this is the standard cycle to handle an application
  766.     */
  767.     ctrl_C = 2**12
  768.     s = 0
  769.     DO FOREVER
  770.         Call Handle("muiApp", "H", s) /* THIS IS LINE prefs.rxMUI_LINE_1 = 954 */
  771.         ws = 0
  772.         DO i = 0 TO (H.num - 1)
  773.             id = H.i
  774.             SELECT
  775.                 WHEN (id = "QUIT") | (id = "G_CANCEL")
  776.                 THEN DO
  777.                     Call CleanUp
  778.                     EXIT
  779.                 END
  780.  
  781.                 WHEN (id = "G_GRABMP")
  782.                 THEN DO
  783.                     Call PrefsWindowGet()
  784.                     Call GrabMasterPage()
  785.                     Call PrefsWindowSet()
  786.                 END
  787.  
  788.             WHEN (id = "MUIMENUPREFSMUI")
  789.                 THEN DO
  790.                 END
  791.  
  792.                 WHEN (id = "MUIMENULOAD")
  793.                 THEN DO
  794.                     Call LoadPrefsAs()
  795.                     Call PrefsWindowSet()
  796.                 END
  797.  
  798.                 WHEN (id = "MUIMENUSAVE")
  799.                 THEN DO
  800.                     Call PrefsWindowGet()
  801.                     Call SavePrefs()
  802.                     Call PrefsWindowSet()
  803.                 END
  804.  
  805.                 WHEN (id = "MUIMENUSAVEAS")
  806.                 THEN DO
  807.                     Call PrefsWindowGet()
  808.                     Call SavePrefsAs()
  809.                     Call PrefsWindowSet()
  810.                 END
  811.  
  812.                 WHEN (id = "MUIMENUQUIT")
  813.                 THEN DO
  814.                     IF (ShowRequester('Really Quit?', 'No|Yes') = 0)
  815.                     THEN DO
  816.                         Call CleanUp
  817.                         EXIT
  818.                     END
  819.                 END
  820.  
  821.                 WHEN (id = "G_OK")
  822.                 THEN DO
  823.                     Return
  824.                 END
  825.  
  826.                 OTHERWISE Say h.i
  827.             END
  828.         END
  829.         IF (~ws) THEN Iterate
  830.         s = Wait( OR(h.signals, ctrl_C) )
  831.         IF (AND(s, ctrl_C) ~= 0)
  832.         THEN EXIT
  833.     END
  834. EXIT
  835. /* /// */
  836. /* /// GetDefaultMeasurementSystem()
  837. */
  838. GetDefaultMeasurementSystem:
  839.     PROCEDURE
  840.  
  841.     'GETMEASUREMENTS COORDINATE stemc RELATIVE rel TEXT tex FROM fro'
  842.      st = 'SETMEASUREMENTS COORDINATE 'stemc.horizontal stemc.vertical' RELATIVE 'rel' TEXT 'tex' FROM 'fro
  843.     'SETMEASUREMENTS COORDINATE POINTS SAMEAS RELATIVE SAMEAS TEXT POINTS FROM PAGE'
  844. Return st
  845. /* /// */
  846. /* /// GetFileName(prefName)
  847. */
  848. GetFileName:
  849.     PARSE ARG fileName,text
  850.     file = FilePart(fileName)
  851.     path = PathPart(fileName)
  852.  
  853.     'GETFILE TITLE "'|| text ||'" PATH "'|| path ||'" FILE "'|| file ||'"'
  854.     IF (RC = 0)
  855.     THEN fileName = RESULT
  856.     ELSE fileName = 0
  857. Return fileName
  858. /* /// */
  859. /* /// GrabMasterPage()
  860. */
  861. GrabMasterPage:
  862.     ADDRESS 'PAGESTREAM'
  863.  
  864.     'CURRENTWINDOWPATH'
  865.      global.WindowName = RESULT
  866.  
  867.     'GETPAGEMASTERPAGE MASTERPAGE _mName'
  868.     IF (RC = 10)
  869.     THEN DO
  870.         Call ShowRequester('Please open a new Document first! Quit now!')
  871.         Return
  872.     END
  873.     global.MasterPageName = _mName
  874.  
  875.     'GETMEASUREMENTS COORDINATE _stemC'
  876.  
  877.     IF (_stemc.vertical = 'SAMEAS')
  878.     THEN _stemc.vertical = _stemc.horizontal
  879.  
  880.     'GETMARGINGUIDES _guides'
  881.  
  882.     global.MasterPageMargin_Left   = _guides.inside
  883.     global.MasterPageMargin_Right  = _guides.outside
  884.     global.MasterPageMargin_Top    = _guides.top
  885.     global.MasterPageMargin_Bottom = _guides.bottom
  886.  
  887.  
  888.     'GETDIMENSIONS _dim MASTERPAGE "'|| global.MasterPageName ||'" WINDOW "'|| global.WindowName ||'"'
  889.     IF (_dim.orientation = 'PORTRAIT')
  890.     THEN DO
  891.         global.MasterPageSize_Width  = _dim.width
  892.         global.MasterPageSize_Height = _dim.height
  893.     END
  894.     ELSE DO
  895.         global.MasterPageSize_Width  = _dim.height
  896.         global.MasterPageSize_Height = _dim.width
  897.     END
  898. Return
  899. /* /// */
  900. /* /// LoadPrefs(fileName)
  901. */
  902. LoadPrefs:
  903.  
  904.     /*
  905.     ** load the preferences file
  906.     ** -------------------------
  907.     */
  908.  
  909.     PARSE ARG fileName
  910.     IF (fileName = "")
  911.     THEN fileName = standardPrefs
  912.  
  913.     say 'loading 'fileName' ...'
  914.  
  915.     /*
  916.     ** Check the version of the prefs file
  917.     */
  918.  
  919.     IF (CheckPrefsVersion(fileName) ~= 0)
  920.     THEN DO
  921.         Call ShowRequester('Prefsfile not found or not valid! Using defaults.', 'Hmm...')
  922.         Return
  923.     END
  924.     ELSE DO
  925.         Call Open('Prefs', fileName, 'R')
  926.         Say 'Reading prefs file...'
  927.         dummy = ReadLN('Prefs')
  928.         DO xx = 1 to 100
  929.             command = ReadLn('Prefs')
  930.             INTERPRET command
  931.             IF EOF('Prefs') THEN LEAVE
  932.         END
  933.         Call Close('Prefs')
  934.     END
  935. RETURN
  936. /* /// */
  937. /* /// LoadPrefsAs()
  938. */
  939. LoadPrefsAs:
  940.     /*
  941.     ** Load Prefs with selectable name
  942.     ** -------------------------------
  943.     */
  944.  
  945.     prefName = GetFileName(currentPrefs, 'Load Preferences...')
  946.     IF (prefName ~= 0)
  947.     THEN DO
  948.         currentPrefs = prefName
  949.         Call LoadPrefs(currentPrefs)
  950.     END
  951. Return
  952. /* /// */
  953. /* /// pgsRequester(text)
  954. */
  955. pgsRequester:
  956.     PARSE ARG meldung
  957.  
  958.     /*
  959.     ** Convert to multiple lines
  960.     */
  961.  
  962.     _num       = 1
  963.     mLines.num = _num
  964.     mLines.0   = meldung
  965.  
  966.     DO FOREVER
  967.         _prev = _num-1
  968.         pos = Index(mLines._prev, '|')
  969.         IF (pos = 0)
  970.         THEN LEAVE
  971.  
  972.         mLines._num  = SubStr(mLines._prev, pos+1)
  973.         mLines._prev = Left(mLines._prev, pos-1)
  974.         _num = _num + 1
  975.     END
  976.     mLines.num = _num
  977.  
  978.     l = 0
  979.     DO kk = 0 TO mLines.num - 1
  980.         IF (l < Length(mLines.kk) * 8)
  981.         THEN l = Length(mLines.kk) * 8
  982.         Say mLines.kk
  983.     END
  984.  
  985.     ADDRESS "PAGESTREAM"
  986.     'ALLOCAREXXREQUESTER "error inside '|| pgsName ||'" '|| (l+20) (40 + mLines.num * 10)
  987.      reqhandle = RESULT
  988.  
  989.     'ADDAREXXGADGET '|| reqhandle ||' EXIT '|| (l/2 - 25) (20 + mLines.num * 10) ||' 50 LABEL "_Ok"'
  990.      dummy = RESULT
  991.  
  992.     DO kk = 0 TO mLines.num - 1
  993.         'ADDAREXXGADGET 'reqhandle' TEXT 10 ' (10 + kk*10) l 'STRING "'mLines.kk'"'
  994.     END
  995.  
  996.     'DOAREXXREQUESTER 'reqhandle
  997.      dummy = RESULT
  998.  
  999.     'FREEAREXXREQUESTER 'reqhandle
  1000. RETURN
  1001. /* /// */
  1002. /* /// PrefsWindowGet()
  1003. */
  1004. PrefsWindowGet:
  1005.     Call GetAttr("g_firstPage",        "VALUE",    "prefs.PV_firstPage")
  1006.     Call GetAttr("g_lastPage",        "VALUE",    "prefs.PV_lastPage")
  1007.     IF (prefs.PV_lastPage < prefs.PV_firstPage)
  1008.     THEN DO
  1009.         prefs.PV_lastPage = prefs.PV_firstPage
  1010.     END
  1011.  
  1012.     Call GetAttr("g_x_num",            "VALUE",    "prefs.PV_x_num")
  1013.     Call GetAttr("g_y_num",            "VALUE",    "prefs.PV_y_num")
  1014.  
  1015.     Call GetAttr("g_gsFileName",    "CONTENTS", "prefs.PV_gsFileName")
  1016.     Call GetAttr("g_epsFileName",    "CONTENTS", "prefs.PV_epsFileName")
  1017.     Call GetAttr("g_leaveExternal",    "SELECTED", "prefs.PV_leaveExternal")
  1018.  
  1019.     Call GetAttr("g_pdfFileName",    "CONTENTS", "prefs.PV_pdfFileName")
  1020. Return
  1021. /* /// */
  1022. /* /// PrefsWindowSet()
  1023. */
  1024. PrefsWindowSet:
  1025.     Call Set("g_firstPage",        "VALUE",    prefs.PV_firstPage)
  1026.     Call Set("g_lastPage",        "VALUE",    prefs.PV_lastPage)
  1027.  
  1028.     Call Set("g_x_num",            "VALUE",    prefs.PV_x_num)
  1029.     Call Set("g_y_num",            "VALUE",    prefs.PV_y_num)
  1030.  
  1031.  
  1032.     Call Set("g_gsFileName",    "CONTENTS", prefs.PV_gsFileName)
  1033.     Call Set("g_epsFileName",    "CONTENTS", prefs.PV_epsFileName)
  1034.     Call Set("g_leaveExternal",    "SELECTED", prefs.PV_leaveExternal)
  1035.  
  1036.     Call Set("g_pdfFileName",    "CONTENTS", prefs.PV_pdfFileName)
  1037.  
  1038. Return
  1039. /* /// */
  1040. /* /// SavePrefs(fileName)
  1041. */
  1042. SavePrefs:
  1043.     /*
  1044.     ** save the preferences file
  1045.     ** -------------------------
  1046.     */
  1047.  
  1048.     PARSE ARG filename
  1049.     IF (fileName = "")
  1050.     THEN fileName = standardPrefs
  1051.  
  1052.     say 'saving 'fileName' ...'
  1053.  
  1054.     okOpen = Open('Prefs', fileName, 'W')
  1055.     IF (okOpen = 1)
  1056.     THEN DO
  1057. OPTIONS FAILAT 11
  1058.         Say 'writing prefs "'|| fileName ||'"...'
  1059.         WriteLN('Prefs', pgsName pgsVersion)
  1060.  
  1061.         Call WritePrefsNameValue('Prefs', 'prefs.PV_firstPage')
  1062.         Call WritePrefsNameValue('Prefs', 'prefs.PV_lastPage')
  1063.  
  1064.         Call WritePrefsNameValue('Prefs', 'prefs.PV_x_num')
  1065.         Call WritePrefsNameValue('Prefs', 'prefs.PV_y_num')
  1066.  
  1067.         Call WritePrefsNameValue('Prefs', 'prefs.PV_gsFileName')
  1068.         Call WritePrefsNameValue('Prefs', 'prefs.PV_epsFileName')
  1069.         Call WritePrefsNameValue('Prefs', 'prefs.PV_leaveExternal')
  1070.  
  1071.         Call WritePrefsNameValue('Prefs', 'prefs.PV_pdfFileName')
  1072.  
  1073.         WriteLN('Prefs', '/* END OF Prefsfile for '|| pgsName pgsVersion ||' ('|| pgsDate ||') */')
  1074. OPTIONS FAILAT 10
  1075.         Call Close('Prefs')
  1076.     END
  1077.     ELSE DO
  1078.         Say 'Error writing prefs file "'|| fileName ||'"'
  1079.         Call ShowRequester('ERROR writing prefs file '|| fileName, 'Damn!')
  1080.     END
  1081. RETURN
  1082. /* /// */
  1083. /* /// SavePrefsAs()
  1084. */
  1085. SavePrefsAs:
  1086.     /*
  1087.     ** Save Prefs with selectable name
  1088.     ** -------------------------------
  1089.     */
  1090.  
  1091.     prefName = GetFileName(currentPrefs, 'Save Preferences As...')
  1092.     IF (prefName ~= 0)
  1093.     THEN DO
  1094.         currentPrefs = prefName
  1095.         Call SavePrefs(currentPrefs)
  1096.     END
  1097. Return
  1098. /* /// */
  1099. /* /// SetCorrectMSys(vName)
  1100. */
  1101. SetCorrectMSys:
  1102.     PARSE ARG vName
  1103.  
  1104.     Interpret vName || ' = p2d('|| vName || ', mSys('|| vName ||')) || mSys('|| vName ||')'
  1105. Return
  1106. /* /// */
  1107. /* /// SetDefaults()
  1108. */
  1109. SetDefaults:
  1110.  
  1111.     /*
  1112.     ** defaults needed in the program
  1113.     */
  1114.  
  1115.     pgsInstallDir    = 'PageStream:Scripts/MUIPDFPrinter'
  1116.     pgsName            = 'MUIPDFPrinter'
  1117.     pgsVersion        = 'V1.00'
  1118.     pgsAuthor        = 'Michael Merkel'
  1119.     pgsCopy            = '©1996-2001 Michael Merkel'
  1120.     pgsLVer            = '1.00'
  1121.     pgsDate            = '12/29/2001'
  1122.     pgsPic            = pgsInstallDir || '/MUIPDFPrinter.pic'
  1123.     standardPrefs    = pgsInstallDir || '/MUIPDFPrinter.prefs'
  1124.  
  1125.     global.TRUE  = 1
  1126.     global.FALSE = 0
  1127.  
  1128.     /*
  1129.     ** globals
  1130.     */
  1131.     global.TMPEPS         = 'T:_page.eps_'
  1132.     global.DumpFile     = ''
  1133.  
  1134.     currentPrefs        = standardPrefs
  1135.     const.measure        = 'pt'
  1136.     const.tf.0            = 'FALSE'
  1137.     const.tf.1            = 'TRUE'
  1138.     const.RetCanceled    = -1
  1139.     const.RetErrorGS    = -2
  1140.     const.RetErrorPlace    = -3
  1141.  
  1142.     /*
  1143.     ** PDF values
  1144.     */
  1145.  
  1146.     prefs.PV_pdfFileName        = 'RAM:test.pdf'
  1147.     prefs.PV_epsFileName        = 'T:EPSfiles'
  1148.     prefs.PV_gsFileName            = 'Ghostscript:gs'
  1149.     prefs.PV_firstPage            = 1
  1150.     prefs.PV_lastPage            = 1
  1151.     prefs.PV_x_num                = 1
  1152.     prefs.PV_y_num                = 2
  1153.     prefs.PV_leaveExternal        = global.TRUE
  1154.  
  1155.     Call SplitAllFileNames
  1156. Return
  1157. /* /// */
  1158. /* /// ShowRequester(question, knobs)
  1159. */
  1160. ShowRequester:
  1161.     /*
  1162.     ** Show requester with some gadgets
  1163.     ** --------------------------------
  1164.     */
  1165.     PARSE ARG question,knobs
  1166.     say "knobs: " || knobs
  1167.     IF (knobs = "")
  1168.     THEN knobs = "OK"
  1169.     Say question
  1170.     reqData = EasyRequest(question, pgsName, knobs)
  1171.     Say reqData
  1172. Return reqData
  1173. /* /// */
  1174. /* /// WritePrefsNameValue(file, name)
  1175. */
  1176. WritePrefsNameValue:
  1177.     /*
  1178.     ** write parameter with value in file
  1179.     ** ----------------------------------
  1180.     */
  1181.  
  1182.     PARSE ARG file,name
  1183.  
  1184.     Interpret "saveSTR = '"|| name ||" = ""'"|| name ||"'""'"
  1185.     WriteLN(file, saveSTR)
  1186. Return
  1187. /* /// */
  1188.  
  1189. /* /// ON ERROR/FAILURE
  1190. */
  1191. Error:
  1192. Failure:
  1193.     f = rc
  1194.     str =               "*-------------------------------------------*"
  1195.     str = str || '|' || "* Command in line "|| sigl
  1196.     str = str || '|' || "* throws RC="|| f
  1197.     str = str || '|' || "*-------------------------------------------*"
  1198.  
  1199.     Call UnlockPageStream()
  1200.     Call pgsRequester(str)
  1201. Exit
  1202. /* /// */
  1203. /* /// ON HALT
  1204. */
  1205. Halt:
  1206.     signal Quit
  1207. Exit
  1208. /* /// */
  1209. /* /// ON NOVALUE
  1210. */
  1211. NoValue:
  1212.     f = rc
  1213.     str =               "*-------------------------------------------*"
  1214.     str = str || '|' || "* Error in line "|| sigl
  1215.     str = str || '|' || "* used uninitialized variable!"
  1216.     str = str || '|' || "*-------------------------------------------*"
  1217.  
  1218.     Call UnlockPageStream()
  1219.     Call pgsRequester(str)
  1220.  
  1221.     Signal QUIT
  1222. Exit
  1223. /* /// */
  1224. /* /// ON RXMUIERROR
  1225. */
  1226. RxMUIError:
  1227.     IF Symbol('RxMUIError')=='VAR'
  1228.     THEN RxMUIErrorMore=', More:' RxMUIError
  1229.     ELSE RxMUIErrorMore=''
  1230.  
  1231.     f = rc
  1232.     str =               "*-------------------------------------------*"
  1233.     str = str || '|' || "* Syntax Error in line "|| sigl
  1234.     str = str || '|' || "* rxMuiError "|| arg(1) ||": " GetRxMUIString(arg(1))RxMUIErrorMore
  1235.     str = str || '|' || "*-------------------------------------------*"
  1236.  
  1237.     Call UnlockPageStream()
  1238.     Call pgsRequester(str)
  1239.  
  1240.     Signal Quit
  1241. Exit
  1242. /* /// */
  1243. /* /// ON SYNTAX
  1244. */
  1245. SYNTAX:
  1246.     f = rc
  1247.     str =               "*-------------------------------------------*"
  1248.     str = str || '|' || "* Syntax Error in line "|| sigl
  1249.     str = str || '|' || "* "|| f ||":" ErrorText(f)
  1250.     str = str || '|' || "*-------------------------------------------*"
  1251.  
  1252.     Call UnlockPageStream()
  1253.     Call pgsRequester(str)
  1254.  
  1255.     Signal QUIT
  1256. EXIT
  1257. /* /// */
  1258.  
  1259. /* /// ON QUIT
  1260. */
  1261. Quit:
  1262. exit
  1263. /* /// */
  1264.  
  1265. /* /// UnlockPageStream()
  1266. */
  1267. UnlockPageStream:
  1268.     /*
  1269.     ** Unlock PageStream and QUIT
  1270.     */
  1271.     ADDRESS 'PAGESTREAM'
  1272.     'LOCKINTERFACE FALSE'
  1273.     'REFRESH ON'
  1274.     IF (global.WindowName ~= '')
  1275.     THEN DO
  1276.         'REFRESHWINDOW WINDOW "'|| global.WindowName ||'"'
  1277.         ''global.DefMeasure''
  1278.     END
  1279. Return
  1280. /* /// */
  1281.  
  1282. /* /// SplitFileName(fileNameAll)
  1283. ** -------------------------------------------------
  1284. ** Split a filename in Directory and actual Filename
  1285. ** -------------------------------------------------
  1286. */
  1287.  
  1288. SplitFileName:
  1289.     PARSE ARG fileNameAll
  1290.  
  1291.     name = Reverse(fileNameAll)
  1292.     pos = pos('/',name)
  1293.     IF (pos = 0)
  1294.     THEN pos = pos(':',name)
  1295.  
  1296.     IF (pos = 0)
  1297.     THEN DO
  1298.         _splitName.dirN  = ''
  1299.         _splitName.fileN = fileNameAll
  1300.     END
  1301.     ELSE DO
  1302.         _splitName.dirN  = Left(fileNameAll, Length(fileNameAll)-(pos-1))
  1303.         _splitName.fileN = Right(fileNameAll, pos-1)
  1304.     END
  1305.     _splitName.completeN = fileNameAll
  1306. Return
  1307. /* /// */
  1308. /* /// SplitAllFileNames()
  1309. ** -------------------------------------------------
  1310. ** Split all used filenames
  1311. ** -------------------------------------------------
  1312. */
  1313. SplitAllFilenames:
  1314.     Call SplitFileName(prefs.PV_pdfFileName)
  1315.     IF (_splitName.completeN ~= 0)
  1316.     THEN DO
  1317.         prefs.PV_pdfFileNamePath    = _splitName.dirN
  1318.         prefs.PV_pdfFileNameFile    = _splitName.fileN
  1319.     END
  1320.  
  1321.     Call SplitFileName(prefs.PV_epsFileName)
  1322.     IF (_splitName.completeN ~= 0)
  1323.     THEN DO
  1324.         prefs.PV_epsFileNamePath    = _splitName.dirN
  1325.         prefs.PV_epsFileNameFile    = _splitName.fileN
  1326.     END
  1327.  
  1328.     Call SplitFileName(prefs.PV_gsFileName)
  1329.     IF (_splitName.completeN ~= 0)
  1330.     THEN DO
  1331.         prefs.PV_gsFileNamePath        = _splitName.dirN
  1332.         prefs.PV_gsFileNameFile        = _splitName.fileN
  1333.     END
  1334. Return
  1335. /* /// */
  1336.  
  1337. /* /// PDFConverter()
  1338. */
  1339. PDFConverter:
  1340.     /*
  1341.     ** What to do:
  1342.     ** - LOOP AT pages_of_PDF_file
  1343.     **  - Convert each page with ghostscript as (E)PS file
  1344.     **  - Load each page with PageStream and place it on the paper
  1345.     **  - Print each paper
  1346.     ** - ENDLOOP
  1347.     */
  1348.  
  1349.     /*
  1350.     ** get all selected PDF file names
  1351.     */
  1352.     loop = 0
  1353.     pdfFile.num        = loop + 1
  1354.     pdfFile.loop    = prefs.PV_pdfFileName
  1355.     f =    POS(',', pdfFile.loop)
  1356.  
  1357.     DO WHILE (f > 0)
  1358.         loopNext = loop + 1
  1359.         pdfFile.loopNext = SubStr(pdfFile.loop, f + 2)
  1360.         pdfFile.loop = SubStr(pdfFile.loop, 1, f - 2)
  1361.         loop = loopNext
  1362.         pdfFile.num        = loop + 1
  1363.  
  1364.         f =    POS(',', pdfFile.loop)
  1365.     END
  1366.  
  1367.     Call BusyOpen("please hold on...", 2, "...", "...", "", pdfFile.num, (1 + prefs.PV_lastPage - prefs.PV_firstPage), 0)
  1368.     ADDRESS 'PAGESTREAM'
  1369.  
  1370.     /*
  1371.     ** get default measurement system and switch to points
  1372.     */
  1373.  
  1374.     global.DefMeasure = GetDefaultMeasurementSystem()
  1375.  
  1376.     /*
  1377.     ** get Position/Size and fileinfo of the EPS object
  1378.     */
  1379.  
  1380.     Call GrabMasterPage
  1381.  
  1382.     global.currentPDFPage = 1
  1383.  
  1384.     global.oneX = (global.MasterPageSize_Width  - global.MasterPageMargin_right - global.MasterPageMargin_left) / prefs.PV_x_num
  1385.     global.oneY = (global.MasterPageSize_Height - global.MasterPageMargin_bottom - global.MasterPageMargin_top) / prefs.PV_y_num
  1386.  
  1387.     /*
  1388.     ** loop all files and place pages
  1389.     */
  1390.     currentName = pdfFile.0
  1391.     DO k = 0 to (pdfFile.num - 1)
  1392.         IF (BusyHandle(1, (k+1)) = 1)
  1393.         THEN DO
  1394.             RETURN
  1395.         END
  1396.  
  1397.         ret = PlaceFile(pdfFile.k,k)
  1398.  
  1399.         IF (ret = const.RetCanceled)
  1400.         THEN DO
  1401.             RETURN
  1402.         END
  1403.     END
  1404.  
  1405.     Call CleanUp()
  1406.  
  1407. RETURN
  1408. /* /// */
  1409. /* /// ret = PlaceFile(FileName)
  1410. */
  1411. PlaceFile: PROCEDURE EXPOSE global. prefs. const.
  1412.     PARSE ARG fileName,fNum
  1413.  
  1414.     Call dumpVar("global.MasterPageMargin_Left")
  1415.     Call dumpVar("global.oneX")
  1416.  
  1417.     /*
  1418.     ** What to do:
  1419.     ** - LOOP AT pages of fileName
  1420.     **  - Convert each page with ghostscript as (E)PS file
  1421.     **  - Load each page with PageStream and place it on the paper
  1422.     ** - ENDLOOP
  1423.     */
  1424.  
  1425.     Call BusyText(1, "%c%bprocessing " || fileName || "%n")
  1426.  
  1427.     ADDRESS 'PAGESTREAM'
  1428.  
  1429.     oldDir = PRAGMA('D', prefs.PV_gsFileNamePath)
  1430.  
  1431.     DO from = prefs.PV_firstPage TO prefs.PV_lastPage
  1432.         Interpret 'ADDRESS 'appPort''
  1433.         Call BusyText(2, "%c%bworking on page " || from || "/" || prefs.PV_lastPage || "%n\n%c...%n")
  1434.  
  1435.         IF (BusyHandle(2, 1 + from - prefs.PV_firstPage) = 1)
  1436.         THEN DO
  1437.             Return const.RetCanceled
  1438.             /*
  1439.             Call CLEANUP
  1440.             EXIT
  1441.             */
  1442.         END
  1443.  
  1444.         to = from
  1445.         Call dumpText(''prefs.PV_gsFileNameFile ||' -dBATCH -dNOPAUSE -sDEVICE=epswrite -sOutputFile='|| global.TMPEPS ||' -dFirstPage='|| from ||' -dLastPage='|| to ||' "'|| fileName ||'"')
  1446.         ADDRESS 'COMMAND'
  1447.         ''prefs.PV_gsFileNameFile ||' -dBATCH -dNOPAUSE -sDEVICE=epswrite -sOutputFile='|| global.TMPEPS ||' -dFirstPage='|| from ||' -dLastPage='|| to ||' "'|| fileName ||'"'
  1448.  
  1449.         _rc = rc
  1450.         _result = result
  1451.  
  1452.         DumpText(' ------------------------ '|| _RC ||' ---------------------- ')
  1453.         DumpText( ' ------------------------ '|| _RESULT ||' ---------------------- ')
  1454.  
  1455.         IF (_RC ~= 0)
  1456.         THEN DO
  1457.             Return const.RetErrorGS
  1458.         END
  1459.         
  1460.         number1 = '00' || fNum
  1461.         number1 = Right(number1, 3)
  1462.         number2 = '00' || from
  1463.         number2 = Right(number2, 3)
  1464.         toFile = prefs.PV_epsFileName || number1 || number2 || '.eps'
  1465.         DumpText('C:Copy "'|| global.TMPEPS ||'" TO "'|| toFile ||'"')
  1466.         DumpText('C:Delete "'|| global.TMPEPS ||'"')
  1467.         ADDRESS COMMAND 'C:Copy "'|| global.TMPEPS ||'" TO "'|| toFile ||'"'
  1468.         ADDRESS COMMAND 'C:Delete "'|| global.TMPEPS ||'"'
  1469.  
  1470.         /*
  1471.         ** get pdf picture into document
  1472.         */
  1473.  
  1474.         a = (global.currentPDFPage - 1) / (prefs.PV_x_num * prefs.PV_y_num)
  1475.         a = global.currentPDFPage - (TRUNC(a) * prefs.PV_x_num * prefs.PV_y_num)
  1476.         /* a = current pic on current page! */
  1477.  
  1478.         b = TRUNC( (a-1) / prefs.PV_x_num ) + 1
  1479.         /* b = current vertical placement */
  1480.  
  1481.         c = a - ((b-1) * prefs.PV_x_num)
  1482.         /* c = current horizontal placement */
  1483.  
  1484.         ePos.left = global.MasterPageMargin_Left + (c-1) * global.oneX
  1485.         ePos.top  = global.MasterPageMargin_Top  + (b-1) * global.oneY
  1486.  
  1487.         ADDRESS 'PAGESTREAM'
  1488.         'PLACEGRAPHIC FILE "'|| toFile ||'" FILTER EPS AT '|| ePos.left ePos.top
  1489.         IF (RC = 0)
  1490.         THEN DO
  1491.             newID = RESULT
  1492.             'GETEPS POSITION pos OBJECTID '|| newID
  1493.  
  1494.             f1 = (pos.right - pos.left) / global.oneX
  1495.             f2 = (pos.bottom - pos.top) / global.oneY
  1496.             IF (f1 > f2) THEN f = f1
  1497.             ELSE              f = f2
  1498.  
  1499.             ePos.right  = ePos.left + (pos.right - pos.left) / f
  1500.             ePos.bottom = ePos.top  + (pos.bottom - pos.top) / f
  1501.  
  1502.             IF (prefs.PV_LeaveExternal = global.TRUE)
  1503.             THEN DO
  1504.                 'EDITEPS POSITION '|| ePos.left ePos.top ePos.right ePos.bottom ||' STORED EXTERNAL OBJECTID '|| newID
  1505.             END
  1506.             ELSE DO
  1507.                 'EDITEPS POSITION '|| ePos.left ePos.top ePos.right ePos.bottom ||' OBJECTID '|| newID
  1508.             END
  1509.             global.currentPDFPage = global.currentPDFPage + 1
  1510.             IF (a >= prefs.PV_x_num * prefs.PV_y_num)
  1511.             THEN DO
  1512.                 'DISPLAY PAGE NEXT'
  1513.             END
  1514.         END
  1515.         ELSE DO
  1516.             Return const.RetErrorPlace
  1517.         END
  1518.     END
  1519.  
  1520. RETURN 1
  1521. /* /// */
  1522.  
  1523.